iOS SDK
Añade AR Clip VPS a una app nativa de iOS. El SDK usa el seguimiento de ARKit para encontrar la posición del usuario en tus mapas VPS. Es un XCFramework que funciona en apps con UIKit, RealityKit y SwiftUI.
Antes de empezar
- iOS 15.0 o posterior
- Xcode 14 o posterior (Swift 5.7 o posterior)
- Un dispositivo compatible con ARKit. El simulador no está soportado.
Instalación
Elige una de estas dos formas.
Swift Package Manager
- En Xcode, elige File → Add Packages….
- Escribe
https://github.com/WebAR-Studio/was-vps-ios.git. - Elige la rama o la etiqueta que necesites y añade el paquete a tu target.
Manual
- Clona el repositorio:
git clone https://github.com/WebAR-Studio/was-vps-ios.git - Arrastra
WASVPS.xcframeworka tu proyecto. - En General → Frameworks, Libraries, and Embedded Content, comprueba que el framework está incrustado (embedded).
Añadir permisos
Añade a Info.plist las descripciones de uso de la cámara y de la ubicación, para que iOS pueda
pedirle acceso al usuario.
<key>NSCameraUsageDescription</key>
<string>This app requires access to the camera to display augmented reality content.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs access to your location to place AR content accurately.</string>
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>VPSLocalization</key>
<string>Enable precise location for accurate AR content positioning.</string>
</dict>
Iniciar VPS
Llama a VPSBuilder.initializeVPS para crear un VPSService. Pásale la ARSession, tu clave de
API y tus ID de ubicación.
Consíguela en arclip.design o escribe a support@arclip.design.
import ARKit
import WASVPS
final class VPSDemoController: UIViewController, ARSCNViewDelegate {
@IBOutlet private weak var sceneView: ARSCNView!
private var configuration: ARWorldTrackingConfiguration?
private var vps: VPSService?
override func viewDidLoad() {
super.viewDidLoad()
sceneView.delegate = self
sceneView.scene = SCNScene()
configuration = VPSBuilder.getDefaultConfiguration()
VPSBuilder.initializeVPS(
arSession: sceneView.session,
apiKey: "your-api-key",
locationIds: ["your-location-id"],
url: "https://api.arclip.app/vps/api/v3",
gpsUsage: false,
delegate: self
) { service in
self.vps = service
self.vps?.start()
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if let configuration { sceneView.session.run(configuration) }
}
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
vps?.frameUpdated()
}
}
extension VPSDemoController: VPSServiceDelegate {
func positionVPS(pos: ResponseVPSPhoto) {
print("Localized pose:", pos)
}
func error(err: NSError) {
print("VPS error:", err)
}
func sending(requestData: UploadVPSPhoto?) {
print("Sending localization request…")
}
}
Pausa el servicio en sessionWasInterrupted y vuelve a iniciarlo en sessionInterruptionEnded.
RealityKit
Con RealityKit, pasa los fotogramas en ARSessionDelegate:
func session(_ session: ARSession, didUpdate frame: ARFrame) {
vps?.frameUpdated()
}
Las llamadas del ciclo de vida (start, stop, clearCustomLocPos) son las mismas que con
SceneKit.
SwiftUI
Envuelve ARSCNView o ARView en UIViewRepresentable o UIViewControllerRepresentable.
Guarda VPSService en un view model compartido y llama a start() / stop() desde los controles
de SwiftUI.
Más opciones
- Pasa una transformación conocida antes de la primera localización con
setCustomLocPosForFirstRequest. - Usa otro endpoint pasando otra
urlainitializeVPS. - Activa
gpsUsagepara incluir las coordenadas del dispositivo en las peticiones.
Solución de problemas
- Si
VPSBuilder.getDefaultConfiguration()devuelvenil, el dispositivo no es compatible. - Si los callbacks no se llaman nunca, comprueba que
frameUpdated()se ejecuta en cada fotograma y que tu clave de API y tus ID de ubicación son válidos. - En la carpeta
/examplestienes ejemplos para UIKit, RealityKit y SwiftUI.